//#include <iostream>
//#include <string>
//#include <list>
//using namespace std;
//
//class Employee {
//	friend const string& FindAddr( const list<Employee>& lst, const string& name );
//public:
//	explicit Employee(const string& n)
//		: name(n), addr("") { cout << "Employee CTOR " << n << endl; }
//
//	Employee(const string& n, const string& a)
//		: name(n), addr(a) { cout << "Employee CTOR " << n << endl; }
//
//	virtual ~Employee() { cout << "Employee DTOR " << name << endl; }
//
//	bool operator==( const Employee& e) const {
//		return e.name == name;
//	}
//private:
//	string name;
//	string addr;
//};
//
//class Manager : public Employee {
//	float salary;
//};
//
//static const string& INVALID_ADDRESS = "";
//
//const string& FindAddr(const list<Employee>& lst, const string& name ) {
//	for( list<Employee>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr ) {
//		if ( (*itr).name == name ) {
//			return (*itr).addr;
//		}
//	}
//
//	return INVALID_ADDRESS;
//}
//
//int main() {
//	list<Employee> lst;
//
//	Employee e1("Dubi", "");
//	Employee e2("Zubi", "Bratislava");
//
//	lst.push_back(e1);
//	lst.push_back(e2);
//
//	const string& addr = FindAddr(lst, "Zubi");
//	cout << addr << endl;
//
//	lst.clear(); // e1, e2 dtors called from list
//
//	return 0; // e1, e2 called
//}